package com.demo.java.OD551_600.OD586;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数字排列(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146570441
 */
public class OdMain {
    /**
     * 将三个数字 a, b, c 所能构成的所有排列添加到列表 lst 中
     * @param lst 需要添加数字排列的列表
     * @param a 第一个数字
     * @param b 第二个数字
     * @param c 第三个数字
     */
    public static void addThreeNumbers(ArrayList<Integer> lst, int a, int b, int c) {
        // 添加所有可能的1位数字、2位数字、3位数字的排列
        lst.add(a);
        lst.add(b);
        lst.add(c);
        lst.add(a * 10 + b); // 例如: a = 1, b = 2, 组合为 12
        lst.add(a * 10 + c);
        lst.add(b * 10 + a);
        lst.add(b * 10 + c);
        lst.add(c * 10 + a);
        lst.add(c * 10 + b);

        lst.add(a * 100 + b * 10 + c); // 例如: a = 1, b = 2, c = 3, 组合为 123
        lst.add(a * 100 + c * 10 + b);
        lst.add(b * 100 + a * 10 + c);
        lst.add(b * 100 + c * 10 + a);
        lst.add(c * 100 + b * 10 + a);
        lst.add(c * 100 + a * 10 + b);
    }

    /**
     * 移除列表 lst 中的重复元素
     * @param lst 需要去重的列表
     */
    public static void remove(ArrayList<Integer> lst) {
        Set<Integer> set = new HashSet<Integer>();
        // 将列表中的元素添加到 set 中, set 会自动去重
        for (Integer x : lst)
            set.add(x);
        // 清空列表
        lst.removeAll(lst);
        // 将 set 中的元素重新添加回列表
        for (Integer x : set)
            lst.add(x);
    }

    /**
     * 检查输入的字符串是否是数字和逗号的组合
     * @param line 输入的字符串
     * @return 如果字符串只包含数字和逗号则返回 true，否则返回 false
     */
    public static boolean check(String line) {
        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);
            // 如果字符既不是数字也不是逗号，返回 false
            if (!(Character.isDigit(ch) || ch == ','))
                return false;
        }
        return true;
    }

    public static void main(String[] args) {
        // 创建扫描器对象
        Scanner scan = new Scanner(System.in);

        // 读取用户输入的字符串
        String line = scan.nextLine();
        // 使用逗号分割输入的数字
        String[] numbers = line.split(",");

        // 如果输入不合法或不是三个数字，输出 -1 并返回
        if (!check(line) || numbers.length != 3) {
            System.out.println(-1);
            return;
        }

        int a = 0, b = 0, c = 0;
        try {
            // 将分割后的字符串转换成整数
            a = Integer.parseInt(numbers[0]);
            b = Integer.parseInt(numbers[1]);
            c = Integer.parseInt(numbers[2]);
        } catch (Exception ex) {
            // 如果转换失败，输出 -1 并返回
            System.out.println(-1);
            return;
        }

        // 如果数字不在 1 到 9 之间，输出 -1 并返回
        if (a <= 0 || a > 9 || b <= 0 || b > 9 || c <= 0 || c > 9) {
            System.out.println(-1);
            return;
        }

        // 如果三个数字中有重复的，输出 -1 并返回
        if (a == b || a == c || b == c) {
            System.out.println(-1);
            return;
        }

        // 将三个数字放入集合中，检查是否含有 2, 5 或 6, 9
        Set<Integer> s = new HashSet<Integer>();
        s.add(a);
        s.add(b);
        s.add(c);

        // 如果输入的数字中包含 2 和 5，或者 6 和 9，则输出 -1
        if ((s.contains(2) && s.contains(5)) || (s.contains(6) && s.contains(9))) {
            System.out.println(-1);
            return;
        }

        // 获取最大数字
        int max = Math.max(a, Math.max(c, b));

        // 创建一个列表用于存储所有可能的数字排列
        ArrayList<Integer> lst = new ArrayList<Integer>();

        // 添加三个数字的所有排列
        addThreeNumbers(lst, a, b, c);

        // 如果数字是 2 或 5，添加另一组排列（7 - a, b, c）
        if (a == 2 || a == 5)
            addThreeNumbers(lst, 7 - a, b, c);
        if (b == 2 || b == 5)
            addThreeNumbers(lst, a, 7 - b, c);
        if (c == 2 || c == 5)
            addThreeNumbers(lst, a, b, 7 - c);

        // 如果数字是 6 或 9，添加另一组排列（15 - a, b, c）
        if (a == 6 || a == 9)
            addThreeNumbers(lst, 15 - a, b, c);
        if (b == 6 || b == 9)
            addThreeNumbers(lst, a, 15 - b, c);
        if (c == 6 || c == 9)
            addThreeNumbers(lst, a, b, 15 - c);

        // 如果包含 2 或 5 和 6 或 9，同时存在其他组合，添加排列
        if ((s.contains(2) || s.contains(5)) && (s.contains(6) || s.contains(9))) {
            int x = s.contains(2) ? 2 : 5;
            int y = s.contains(6) ? 6 : 9;
            int z = a + b + c - x - y;
            addThreeNumbers(lst, 7 - x, 15 - y, z);
        }

        // 去重
        remove(lst);

        // 对列表进行排序
        Collections.sort(lst);

        // 输出排序后的列表中最大数字的位置
        System.out.println(lst.get(max - 1));
    }
}
